package initialize

import (
	"encoding/json"
	"encoding/xml"
	"goweb/examples/gfiber/gmiddleware"
	"goweb/web/router"

	"github.com/gofiber/fiber/v2"
)

// 注册路由: 配置文档 https://docs.gofiber.io/api/fiber
func Routers() *fiber.App {
	// 1. 实例化fiber
	app := fiber.New(fiber.Config{
		Prefork:               false,             // 是否允许多个go线程(默认: false)
		CaseSensitive:         false,             // 接口url区分大小写(默认: false)
		StrictRouting:         false,             // 严格路由(默认：false)，区分 /foo和 /foo/为不同路由,
		ServerHeader:          "Fiber",           // 添加请求头
		AppName:               "Test App v1.0.1", // app name for app
		DisableStartupMessage: false,             // 是否打印服务启动日志(默认：false)
		JSONEncoder:           json.Marshal,      // 设置JSON格式编码方式
		JSONDecoder:           json.Unmarshal,    // 设置JSON格式的解码方式
		XMLEncoder:            xml.Marshal,
		ReadBufferSize:        4096,            // 请求最大缓冲区大小
		BodyLimit:             4 * 1024 * 1024, // 最大请求体大小，超出限制则报413错误
	})

	// 2.添加中间件
	// Use can be used for middleware packages and prefix catchers. app.Use()
	app.Use(gmiddleware.Logger())
	app.Use(gmiddleware.Cors())
	// app.Use(gmiddleware.Auth())

	// 获取路由组实例
	systemRouter := router.AppRouter.System

	// 3. 配置路由
	publicRouter := app.Group("/v1")
	// 3.1 免鉴权
	{
		systemRouter.InitAuthRouter(publicRouter)
	}

	// 3.2 需要鉴权
	privateRouter := app.Group("/v1")
	app.Use(gmiddleware.JWTAuth())
	{
		systemRouter.InitUserRouter(privateRouter)
		systemRouter.InitRoleRouter(privateRouter)
	}

	// 系统中嵌入web端
	/**
	app.Use("/", filesystem.New(filesystem.Config{
		Root:         http.FS(web.Dist),
		Browse:       true,
		Index:        "index.html",
		NotFoundFile: "404.html",
		PathPrefix:   "/dist",   // 前端代码路径web/dist..
		MaxAge:       3600,
	}))
	*/
	return app
}
